package com.ft.oa.service.project;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ft.oa.domain.clueproject.ClueProject;
import com.ft.oa.domain.dto.ApiResult;
import com.ft.oa.domain.dto.project.ExecProjectDto;
import com.ft.oa.domain.dto.project.ExecProjectPage;
import com.ft.oa.domain.project.ExecProject;
import com.ft.oa.domain.project.ExecProjectContract;
import com.ft.oa.domain.project.ExecProjectStage;
import com.ft.oa.domain.sys.SysDept;
import com.ft.oa.domain.sys.SysUser;
import com.ft.oa.domain.vo.project.ExecProjectDetailVo;
import com.ft.oa.domain.vo.project.ExecProjectVo;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;

/**
 * 项目立项
 * @author hefeng
 * @ClassName ExecProjectService
 * @date 2021/12/30 10:47
 */
public interface ExecProjectService extends IService<ExecProject> {
    /**
     * 根据id查询可用的项目信息
     */
    ApiResult allExecproject();
    /**
     *
     */
    ApiResult allweeklyreport(List ids);
    /**
     * param ExecProjectDto
     * return ApiResult
     * describe 项目新建立项操作
     * @author 禾丰
     * @date 2021/12/31 10:03
     */
    ApiResult add(ExecProjectDto execProjectDto);
    /**
     * param ExecProjectDto
     * return ApiResult
     * describe 项目新建立项操作
     * @author 禾丰
     * @date 2021/12/31 10:03
     */
    ApiResult addplan(ExecProjectDto execProjectDto);
    /**
     * param execProject
     * return ApiResult
     * describe 新增子项目
     * @author liyansheng
     * @date 2022-1-11 17:23:20
     */
    ApiResult addSub(ExecProject execProject);

    /**
     * param ExecProjectDto
     * return ApiResult
     * describe 项目编辑立项操作
     * @author 禾丰
     * @date 2021/12/31 10:03
     */
    //ApiResult update(ExecProjectDto execProjectDto);

    /**
     * param execProject
     * return ApiResult
     * describe 修改子项目
     * @author liyansheng
     * @date 2022-1-11 20:05:19
     */
    ApiResult updateSub(ExecProject execProject);

    /**
     * param name项目名称
     * return  List<ExecProject>
     * describe 项目立项管理列表
     * @author 禾丰
     * @date 2022/1/4
     */
    ApiResult list(ExecProjectPage execProjectPage);

    /**
     * param id 项目立项id
     * return  ExecProjectDetailVo项目立项详情
     * describe 项目立项详情
     * @author 禾丰
     * @date 2022/1/4
     */
    ApiResult detail(Long id);

    /**
     * 根据项目编码删除立项信息
     * param id
     * return  int
     * @author liyansheng
     * @date 2022-1-10 13:27:38
     */
    int del(Long id);

    int delUpdate(String type,Long id);

    /**
     * 删除子项目
     * param projectNumber
     * return  int
     * @author liyansheng
     * @date 2022-1-10 13:27:38
     */
    int delSub(String projectNumber);

    /**
     * 判断项目编码是否存在
     * param projectNumber 项目编码
     * return  int
     * @author liyansheng
     * @date 2022-1-10 13:27:38
     */
    int select(String projectNumber);

    /**
     * 根据项目编码查询项目
     * @param projectNumber
     * @return
     */
    ExecProject selectProject(String projectNumber);

    /**
     * param id 项目立项id
     * return  ExecProject
     * describe 子项目详情
     * @author 禾丰
     * @date 2022/1/4
     */
    ExecProject subDetail(Long id);

    /**
     * 根据父项目id查询阶段
     * @param projectNumber
     * @Author liyansheng
     * @return
     */
    List<ExecProjectStage> selectStage(String projectNumber);

    /**
     * 根据父项目id查询阶段
     * @param projectNumber
     * @Author liyansheng
     * @return
     */
    List<ExecProjectContract> selectContract(String projectNumber);

    /**
     * 修改合同数据
     * @param execProjectContracts
     * @Author liyansheng
     * @return
     */
    int updateContract(List<ExecProjectContract> execProjectContracts);

    /**
     * 查询所有父项目
     * @param
     * @Author liyansheng
     * @return
     */
    List<ExecProject> selectProjects();

    /**
     * 项目经理
     * @param
     * @Author liyansheng
     * @return
     */
    List<SysUser> manager();

    /**
     * 用户经理
     * @param
     * @Author liyansheng
     * @return
     */
    List<HashMap<String,Object>> users();

    /**
     * 部门
     * @param
     * @Author liyansheng
     * @return
     */
    List<SysDept> dept();

    /**
     * 售前项目
     * @param
     * @Author liyansheng
     * @return
     */
    List<ClueProject> clueProject();

    /**
     * @param id
     * return  ApiResult
     * @describe 更新阶段状态
     * @author liyansheng
     * @date 2022-1-12 19:06:25
     */
    ApiResult changeStage(Long id);

    /**
     * @param id
     * return  ApiResult
     * @describe 修改招投标表立项状态
     * @author liyansheng
     * @date 2022-1-12 19:06:25
     */
    ApiResult changeBidStatus(Long id);

    /**
     * 根据公司编码查询审批通过的父项目
     * @param id
     * @return
     */
    int getListBySql(Long id);

    String SubSerial(ExecProject execProject);

    /**
     * 查询所有审批通过的父项目
     * @return
     */
    List<ExecProject> getPars();
}
